/**
 * Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved.
 * SPDX-License-Identifier: MIT
 *
 * This file contains the sensors profile for the V80
 *
 * @file profile_sensors.h
 *
 */

#ifndef _PROFILES_SENSORS_H_
#define _PROFILES_SENSORS_H_

/******************************************************************************/
/* Includes                                                                   */
/******************************************************************************/

#include "profile_muxed_device.h"
#include "profile_pdr.h"

#include "asc_proxy_driver.h"
#include "ina3221.h"
#include "isl68221.h"
#include "cat34ts02.h"
#include "sys_mon.h"


/******************************************************************************/
/* Defines                                                                    */
/******************************************************************************/

#define PROFILE_SENSORS_NUM_SENSORS ( 18 )


/******************************************************************************/
/* Local Function implementations                                             */
/******************************************************************************/

/**
 * @brief   Wrapper for the iSYS_MON_ReadTemperature function, to keep it the standard driver API format
 *
 * @param   unused1     Unused parameter (normally i2c bus)
 * @param   unused2     Unused parameter (normally i2c address)
 * @param   unused3     Unused parameter (normally i2c channel)
 * @param   pfValue     Pointer to latest sensor value
 *
 * @return  The return value of iSYS_MON_ReadTemperature
 *
 * @note    No sanity checks, etc, are done - this function is solely a wrapper API
 */
static inline int iSYS_MON_WrappedReadTemperature( uint8_t unused1, uint8_t unused2, uint8_t unused3, float *pfValue )
{
    return iSYS_MON_ReadTemperature( pfValue );
}

/**
 * @brief   Wrapper for the iAXC_GetTemperature function, to keep it the standard driver API format
 *
 * @param   unused1      Unused parameter (normally i2c bus)
 * @param   unused2      Unused parameter (normally i2c address)
 * @param   ucChannelNum Channel Num, used to specify QSFP ID
 * @param   pfValue      Pointer to latest sensor value
 *
 * @return  OK           Data retrieved from proxy driver successfully
 *          ERROR        Data not retrieved successfully
 *
 * @note    No sanity checks, etc, are done - this function is solely a wrapper API
 */
static inline int iAXC_WrappedGetTemperature( uint8_t unused1, uint8_t unused2, uint8_t ucChannelNum, float *pfValue )
{
    int iStatus = ERROR;

    if( 0 < MAX_NUM_EXTERNAL_DEVICES_AVAILABLE )
    {
        iStatus = iAXC_GetTemperature( ucChannelNum, pfValue );
    }

    return iStatus;
}

/**
 * @brief   Wrapper for the iSYS_MON_ReadVoltage function, to keep it the standard driver API format
 *
 * @param   unused1     Unused parameter (normally i2c bus)
 * @param   unused2     Unused parameter (normally i2c address)
 * @param   ucVType     Voltage type to read (normally i2c channel)
 * @param   pfValue     Pointer to latest sensor value
 *
 * @return  The return value of iSYS_MON_WrappedReadVoltage
 *
 * @note    No sanity checks, etc, are done - this function is solely a wrapper API
 */
static inline int iSYS_MON_WrappedReadVoltage( uint8_t unused1, uint8_t unused2, uint8_t ucVType, float *pfValue )
{
    return iSYS_MON_ReadVoltage( ucVType, pfValue );
}

/**
 * @brief   Function pointer called in profile to enable sensors that are used for V80 and V80P
 *
 * @return  TRUE to indictate sensor is enabled
 */
static inline int iSensorIsEnabled( void )
{
    return TRUE;
}

/**
 * @brief   Function pointer called in profile to disable sensors that are not used for V80P
 *
 * @return  TRUE if card is V80 or FALSE if card is V80P
 */
static inline int iSensorIsEnabledOrDisabled( void )
{
    static int     iSensorEnableStatus = FALSE;
    static uint8_t ucProductNameCheck  = FALSE;

    if( FALSE == ucProductNameCheck )
    {
        uint8_t pucField[ EEPROM_MAX_FIELD_SIZE ] =
        { 0 };
        uint8_t ucSizeBytes = 0;

        if( OK == iEEPROM_GetProductName( pucField, &ucSizeBytes ) )
        {
            if( ( NULL != strstr( ( char* )pucField, "v80" ) ) ||
                ( NULL != strstr( ( char* )pucField, "V80" ) ) )
            {
                if( ( NULL == strstr( ( char* )pucField, "80p" ) ) &&
                    ( NULL == strstr( ( char* )pucField, "80P" ) ) )
                {
                    /* Running on a v80 but not a v80p */
                    iSensorEnableStatus = TRUE;
                }
            }

            ucProductNameCheck = TRUE;
        }
    }

    return iSensorEnableStatus;
}


/******************************************************************************/
/* Public variables                                                           */
/******************************************************************************/

ASC_PROXY_DRIVER_SENSOR_DATA PROFILE_SENSORS_SENSOR_DATA[ PROFILE_SENSORS_NUM_SENSORS ] =
{
    { "PCB", PCB_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE, FALSE, 0x1A,
      { ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID,
        ASC_SENSOR_I2C_BUS_INVALID }, iSensorIsEnabled,
      { iCAT34TS02_ReadTemperature, NULL, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, PCB_TEMPERATURE_WARNING_HIGH,
            PCB_TEMPERATURE_CRITICAL_HIGH, PCB_TEMPERATURE_FATAL_HIGH, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "Device", DEVICE_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE, FALSE, 0,
      { ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID,
        ASC_SENSOR_I2C_BUS_INVALID }, iSensorIsEnabled,
      { iSYS_MON_WrappedReadTemperature, NULL, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, DEVICE_TEMPERATURE_WARNING_HIGH,
            DEVICE_TEMPERATURE_CRITICAL_HIGH, DEVICE_TEMPERATURE_FATAL_HIGH, 0, 0,
            ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "VCCINT", VR_VCCINT_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT, FALSE, 0x60,
      { 0, 0, 0, ASC_SENSOR_I2C_BUS_INVALID }, iSensorIsEnabled,
      { iISL68221_ReadTemperature, iISL68221_ReadVoltage, iISL68221_ReadCurrent, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            VR_VCCINT_TEMPERATURE_WARNING_HIGH, VR_VCCINT_TEMPERATURE_CRITICAL_HIGH, VR_VCCINT_TEMPERATURE_FATAL_HIGH,
            0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "Module_0", QSFP_MODULE_0_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE, FALSE, 0,
      { 0, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID },
      iSensorIsEnabledOrDisabled,
      { iAXC_WrappedGetTemperature, NULL, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            QSFP_MODULE_0_TEMPERATURE_WARNING_HIGH, QSFP_MODULE_0_TEMPERATURE_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0,
            0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "Module_1", QSFP_MODULE_1_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE, FALSE, 0,
      { 1, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID },
      iSensorIsEnabledOrDisabled,
      { iAXC_WrappedGetTemperature, NULL, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            QSFP_MODULE_0_TEMPERATURE_WARNING_HIGH, QSFP_MODULE_0_TEMPERATURE_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0,
            0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "Module_2", QSFP_MODULE_2_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE, FALSE, 0,
      { 2, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID },
      iSensorIsEnabledOrDisabled,
      { iAXC_WrappedGetTemperature, NULL, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            QSFP_MODULE_0_TEMPERATURE_WARNING_HIGH, QSFP_MODULE_0_TEMPERATURE_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0,
            0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "Module_3", QSFP_MODULE_3_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE, FALSE, 0,
      { 3, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID },
      iSensorIsEnabledOrDisabled,
      { iAXC_WrappedGetTemperature, NULL, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            QSFP_MODULE_0_TEMPERATURE_WARNING_HIGH, QSFP_MODULE_0_TEMPERATURE_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0,
            0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "DIMM", DIMM_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE, FALSE, 0,
      { 4, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID },
      iSensorIsEnabledOrDisabled,
      { iAXC_WrappedGetTemperature, NULL, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "1V2_VCC_HBM", VR_1V2_VCC_HBM_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT, FALSE, 0x61,
      { 0, 0, 0, ASC_SENSOR_I2C_BUS_INVALID }, iSensorIsEnabled,
      { iISL68221_ReadTemperature, iISL68221_ReadVoltage, iISL68221_ReadCurrent, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "12V_AUX1", VR_12V_AUX1_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_POWER, TRUE, 0x41,
      { ASC_SENSOR_I2C_BUS_INVALID, 1, 1, 1 }, iSensorIsEnabled,
      { NULL, iINA3221_ReadVoltage, iINA3221_ReadCurrent, iINA3221_ReadPower },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, VR_12V_AUX1_CURRENT_WARNING_HIGH,
            VR_12V_AUX1_CURRENT_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "12V_AUX2", VR_12V_AUX2_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_POWER, TRUE, 0x41,
      { ASC_SENSOR_I2C_BUS_INVALID, 2, 2, 2 }, iSensorIsEnabled,
      { NULL, iINA3221_ReadVoltage, iINA3221_ReadCurrent, iINA3221_ReadPower },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, VR_12V_AUX2_CURRENT_WARNING_HIGH,
            VR_12V_AUX2_CURRENT_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "1V2_VCCO_DIMM", VR_1V2_VCCO_DIMM_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT, FALSE, 0x41,
      { ASC_SENSOR_I2C_BUS_INVALID, 0, 0, 0 }, iSensorIsEnabledOrDisabled,
      { NULL, iINA3221_ReadVoltage, iINA3221_ReadCurrent, iINA3221_ReadPower },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "3V3_PEX", VR_3V3_PEX_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_POWER, TRUE, 0x40,
      { ASC_SENSOR_I2C_BUS_INVALID, 1, 1, 1 }, iSensorIsEnabled,
      { NULL, iINA3221_ReadVoltage, iINA3221_ReadCurrent, iINA3221_ReadPower },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, VR_3V3_PEX_CURRENT_WARNING_HIGH,
            VR_3V3_PEX_CURRENT_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "12V_PEX", VR_12V_PEX_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_POWER, TRUE, 0x40,
      { ASC_SENSOR_I2C_BUS_INVALID, 0, 0, 0 }, iSensorIsEnabled,
      { NULL, iINA3221_ReadVoltage, iINA3221_ReadCurrent, iINA3221_ReadPower },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, VR_12V_PEX_CURRENT_WARNING_HIGH,
            VR_12V_PEX_CURRENT_CRITICAL_HIGH, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "3V3_QSFP", VR_3V3_QSFP_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_POWER, FALSE, 0x40,
      { ASC_SENSOR_I2C_BUS_INVALID, 2, 2, 2 }, iSensorIsEnabledOrDisabled,
      { NULL, iINA3221_ReadVoltage, iINA3221_ReadCurrent, iINA3221_ReadPower },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "1V5_VCCAUX", VR_1V5_VCCAUX_DEVICE_ID, ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE, FALSE, 0,
      { ASC_SENSOR_I2C_BUS_INVALID, SYS_MON_VOLTAGES_VCCAUX, ASC_SENSOR_I2C_BUS_INVALID, ASC_SENSOR_I2C_BUS_INVALID },
      iSensorIsEnabled,
      { NULL, iSYS_MON_WrappedReadVoltage, NULL, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "1V2_GTXAVTT", VR_1V2_GTXAVTT_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT, FALSE, 0x61,
      { 2, 2, 2, ASC_SENSOR_I2C_BUS_INVALID }, iSensorIsEnabled,
      { iISL68221_ReadTemperature, iISL68221_ReadVoltage, iISL68221_ReadCurrent, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    },
    { "0V88_VCC_CPM5", VR_0V88_VCC_CPM5_DEVICE_ID,
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_TEMPERATURE | ASC_PROXY_DRIVER_SENSOR_BITFIELD_VOLTAGE |
      ASC_PROXY_DRIVER_SENSOR_BITFIELD_CURRENT, FALSE, 0x61,
      { 1, 1, 1, ASC_SENSOR_I2C_BUS_INVALID }, iSensorIsEnabled,
      { iISL68221_ReadTemperature, iISL68221_ReadVoltage, iISL68221_ReadCurrent, NULL },
      {
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED, ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_MILLI },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE },
          { 0, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL,
            ASC_SENSOR_INVALID_VAL, ASC_SENSOR_INVALID_VAL, 0, 0, ASC_PROXY_DRIVER_SENSOR_STATUS_NOT_PRESENT,
            ASC_PROXY_DRIVER_SENSOR_OPERATIONAL_STATUS_ENABLED,  ASC_PROXY_DRIVER_SENSOR_UNIT_MOD_NONE } },
      ASC_PROXY_DRIVER_SENSOR_THRESHOLD_STATUS_HEALTHY
    }
};

#endif
